/**
 * 从网络获取设备信息控制器
 * 
 * 从厦门大学设备获取:https://iosp.xmu.edu.cn/instrument/index
 * 
 * 所需模块支持：
 * 1.Axios - 支持http/https的网络访问模块（支持node.js和Browser)
 * 2.Cheerio - 类似JQuery的工作方式进行WEb页面资源的读取模块
 * 
 * npm install axios
 * npm install cheerio
 * npm install -D @types/cheerio
 * 从网络获取数据
 * 1.通过网络获取指定ISBN的页面内容信息
 * 2.进行数据的清洗和格式化
 * 3、转换输出指定JSON对象
 * 
 */

const express = require('express');
const axios = require('axios').default;
const cheerio = require("cheerio");
 
const util = require("../common/util");
const config = require("../common/config");
 
//设置axios访问server的user-agent
const axiosConfig = {
  headers: {
    "User-Agent":
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0"
  },
};

//定义实验室设备信息的结构
let labsInfo= {
  title:"" ,//设备名称
  imageurl:"" ,//图片地址
  spcialtype:"", //规格型号
  status:"" ,//运行状态
  category:"" ,//仪器类别
  identify:"",//设备认证 
  price:"" ,//设备价格
  
  description:"" ,//设备描述
  
  danwei:"" ,//所在单位
  contact:"" ,//设备联系人
  phone:"" ,//设备电话
  email:"" ,//设备邮箱
  location:"" ,//设备位置
  xiamenId:"" ,//访问的id
  technicalSpecs: "", // 技术指标
  mainFunctions: "", // 主要功能
  serviceContent: "", // 服务内容
  openSharingRules: "" // 对外开放共享规定
};
 
/**
 *
 * @param {express.Request} req
 * @param {express.Response} res
 */
function fetchFromDouban(req, res) {
//   let isbn = req.params.isbn; //获取路由参数中的isb值
    let id = req.params.id; //获取路由参数中的id值
 
  let doubanUrl = config.xiamen.baseUrl + id;
  axios
    .get(doubanUrl, axiosConfig)
    .then((result) => {
      //path: '/instrument/detail?id=9942'拆分
      // labsInfo.xiamenId=result.request.path.split("?")[1].split("=")[1];
      //获取设备的id
      clearlabsInfo();
      const queryString=result.request.path.split("?")[1];
      const params = new URLSearchParams(queryString);
      labsInfo.xiamenId = params.get('id');   // 输出 "9942"
      // util.log(result.data);
      parsexiamenequipment(result.data);

      res.json(util.FormatJSONData(200, "从厦门大学获取设备信息成功",labsInfo));
    })
    .catch((error) => {
      util.err(error);
      res.json(
        util.FormatJSONData(400, "从厦门大学获取设备信息失败", { error: error })
      );
    });
}


/**
 * 分析厦门实验室设备信息
 * @param {String} html --html内容
 */
function parsexiamenequipment(html) {
  const $ = cheerio.load(html);
  let title = $("#pagewarp h1").html();
  // util.log(title);
  labsInfo.title = title;
  let imageurl = $("#pagewarp .pic img").attr("src");
  labsInfo.imageurl = imageurl;
  util.log(imageurl);

  // 提取 <dl> 中的信息
  $("dl dd").each((index, element) => {
    const text = $(element).text().trim(); // 获取当前 <dd> 的文本内容
    if (text.includes("规格型号：")) {
      labsInfo.spcialtype = text.split("规格型号：")[1].trim();
    } else if (text.includes("运行状态：")) {
      labsInfo.status = text.split("运行状态：")[1].trim();
    } else if (text.includes("仪器类型：")) {
      labsInfo.category = text.split("仪器类型：")[1].trim();
    } else if (text.includes("仪器认证：")) {
      labsInfo.identify = text.split("仪器认证：")[1].trim();
    } else if (text.includes("参考收费标准：")) {
      labsInfo.price = text.split("参考收费标准：")[1].trim();
    }
  });
  // 提取新的联系信息
  $(".iteminfo .cont dl dd").each((index, element) => {
    const label = $(element).find("label").text().trim();
    const value = $(element).find(".p").text().trim();
    if(label.includes("所在单位:")){
      labsInfo.danwei = value;
      util.log(labsInfo.danwei);
    }
    else if (label.includes("联系人:")) {
      labsInfo.contact = value;
      util.log(labsInfo.contact);
    } else if (label.includes("联系电话:")) {
      labsInfo.phone = value;
      util.log(labsInfo.phone);
    } else if (label.includes("电子邮箱:")) {
      labsInfo.email = value;
      util.log(labsInfo.email);
    } else if (label.includes("仪器地址:")) {
      labsInfo.location = value;
      util.log(labsInfo.location);
    }
  });
  // 提取服务信息
  $(".iteminfo .cont dl dt").each((index, element) => {
      const label = $(element).find("label").text().trim();
      const value = $(element).find(".p").text().trim();
      if (label.includes("技术指标:")) {
          labsInfo.technicalSpecs = value;
          util.log(labsInfo.technicalSpecs);
      } else if (label.includes("主要功能:")) {
          labsInfo.mainFunctions = value;
          util.log(labsInfo.mainFunctions);
      } else if (label.includes("服务内容:")) {
          labsInfo.serviceContent = value;
          util.log(labsInfo.serviceContent);
      } else if (label.includes("对外开放共享规定:")) {
          labsInfo.openSharingRules = value;
          util.log(labsInfo.openSharingRules);
      }
  });
    // 提取服务信息
  $(".iteminfo .cont dl dt").each((index, element) => {
    const label = $(element).find("label").text().trim();
    const value = $(element).find(".p").text().trim();
    if (label.includes("技术指标:")) {
        labsInfo.technicalSpecs = value;
    } else if (label.includes("主要功能:")) {
        labsInfo.mainFunctions = value;
    } else if (label.includes("服务内容:")) {
        labsInfo.serviceContent = value;
    } else if (label.includes("对外开放共享规定:")) {
        labsInfo.openSharingRules = value;
    }
  });


}


/**
 * 清除全局bookInfo中的原有内容
 */
function clearlabsInfo() {
  for (const key in labsInfo) {
    if (Object.hasOwnProperty.call(labsInfo, key)) {
      labsInfo[key] = "";
    }
  }
}
 
module.exports = {
  fetchFromDouban,
};